Jeg viser en liste over kontakter fra webservicen og viser den i kontakter 'sektioneret' tableView som vist på skærmbilledet. Problemet er, at jeg får samme tagværdier for afkrydsningsfelter i første række til sektion A såvel som sektion S. Jeg har sorteret et array og vist i den indekserede tabelvisning. Sådan får du forskellige tagværdier afhængigt af indexPath.row uanset antal viste sektioner. Her er hvad jeg prøvede I celleForRowAtIndexPath: UIButton * checkBox; hvis (UI_USER_INTERFACE_IDIOM () == UIUserInterfaceIdiomPhone) { checkBox = [[UIButton alloc] initWithFrame: CGRectMake (7, 8, 30, 30)]; } andet { checkBox = [[UIButton alloc] initWithFrame: CGRectMake (15, 13, 30, 30)]; } // int cnt = 0; // for (int i = indexPath.section - 1; i> 0; i--) // { // cnt + = [[objectsForCharacters objectForKey: [arrayOfCharacters objectAtIndex: i]] count]; // arrayOfCharachters har char 'A' til 'Z' //} //checkBox.tag = cnt + indexPath.row; [checkBox setImage: [UIImage imageNamed: @ "checkBox.png"] forState: UIControlStateNormal]; [checkBox addTarget: self action: @selector (checkBoxClicked :) forControlEvents: UIControlEventTouchUpInside]; [checkBox setTag: indexPath.row]; [cell.contentView addSubview: checkBox]; returcelle; } - (ugyldigt) checkBoxClicked: (id) afsender { CGPoint buttonPosition = [sender convertPoint: CGPointZero toView: self.tableViewContact]; NSIndexPath * indexPath = [self.tableViewContact indexPathForRowAtPoint: buttonPosition]; UIButton * tappedButton = (UIButton *) afsender; NSLog (@ "Tag nummer =% d", [afsender tag]); if ([tappedButton.currentImage isEqual: [UIImage imageNamed: @ "checkBox.png"]]) { [sender setImage: [UIImage imageNamed: @ "checkBoxMarked.png"] forState: UIControlStateNormal]; hvis (indexPath! = Nil) { NSString * finalIntId = [mutableArrayOfIds objectAtIndex: indexPath.row]; // gem afkrydsningsfelt-id'er i mutableArrayOfIds NSLog (@ "Mærket markeret knap id =% @", finalIntId); [arrayOfIds addObject: finalIntId]; } // NSString * finalIntId = [mutableArrayOfIds objectAtIndex: tappedButton.tag]; // NSString * finalIntId = [mutableArrayOfIds objectAtIndex: indexPath.row]; } andet { [sender setImage: [UIImage imageNamed: @ "checkBox.png"] forState: UIControlStateNormal]; NSLog (@ "Ikke markeret"); // [arrayOfIds removeObjectAtIndex: tappedButton.tag]; } } - (NSString *) tableView: (UITableView *) tableView titleForHeaderInSection: (NSInteger) sektion { if ([arrayOfCharacters count] == 0) { Vend tilbage @""; } returnere [NSString stringWithFormat: @ "% @", [arrayOfCharacters objectAtIndex: afsnit]]; } - (NSArray *) sektionIndexTitlesForTableView: (UITableView *) tableView { NSArray * toBeReturned = [NSArray arrayWithArray: [@ "A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | # " componentsSeparatedByString: @ "|"]]; vende tilbage til BeReturned; } - (NSInteger) tableView: (UITableView *) tableView sectionForSectionIndexTitle: (NSString *) title atIndex: (NSInteger) index { NSInteger count = 0; for (NSString * tegn i arrayOfCharacters) { hvis ([tegn erEqualToString: titel]) { returantal } tælle ++; } returnere 0; } - (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView { returnere [arrayOfCharacters count]; // return 1; } - (NSInteger) tableView: (UITableView *) tableView numberOfRowsInSection: (NSInteger) sektion { // returnere [mutableArray count]; return [[objectsForCharacters objectForKey: [arrayOfCharacters objectAtIndex: section]] count]; }
2020-12-07 22:54:05
du indstiller den samme tagværdi for alle sektioner, der har samme række. IndexPath har to egenskaber, {sektion, række}. Lad os sige, at sektion A har to rækker, for række1 -> indexPath.section = 0, indexPath.row = 0; for række2-> indexPath.section = 0, indexPath.row = 1; Lad os sige, at sektion S har to rækker, for række1 -> indexPath.section = 1, indexPath.row = 0; for række2-> indexPath.section = 1, indexPath.row = 1; Så for række 1 i sektion A og række 1 i sektion S indstiller du den samme tagværdi, som er 0. Der er dit problem. Prøv at indstille tagværdien som nedenfor. button.tag = indexPath.section * 1000 + indexPath.row; når du henter sektionen og rækken, NSInteger sektion = (button.tag) / 1000; NSInteger række = (button.tag)% 1000; | Prøv dette... - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath { statisk NSString * CellIdentifier = @ "Cell"; UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: CellIdentifier]; hvis (celle == nul) { cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier]; } UIButton * checkBox = [[UIButton alloc] initWithFrame: CGRectMake (280, 10, 50, 44)]; checkBox.backgroundColor = [UIColor orangeColor]; [checkBox addTarget: self action: @selector (checkBoxClicked: event:) forControlEvents: UIControlEventTouchUpInside]; [checkBox setTag: indexPath.row]; [cell.contentView addSubview: checkBox]; returcelle; } - (ugyldigt) checkBoxClicked: (id) afsenderhændelse: (id) begivenhed { NSSet * touches = [event allTouches]; UITouch * touch = [berører ethvert objekt]; CGPoint currentTouchPosition = [touch locationInView: self.tv]; // her er tv TableView-objekt NSIndexPath * indexPath = [self.tv indexPathForRowAtPoint: currentTouchPosition]; NSLog (@ "værdi af indePath.section% d, indexPath.row% d", indexPath.section, indexPath.row); } | Dette sker, fordi du tildeler tag til knapper, Uafhængigt af sektioner. Begge i første række af sektioner A og S har række = 0. så tag, der er tildelt deres respektive knap, er 0. Du skal tildele dem Behold henvisning til dine sektioner. Jeg vil foreslå at tildele tilgængelighedstip med kommasepareret form indeholdende sektion, række. Og i din metode - (ugyldigt) checkBoxClicked: (id) afsender { // vælg streng fra kommaadskilt form. 1. er din sektion, 2. er række. } anden mulighed er Gør hvad nogensinde du laver og implementer din Button-metode som denne. CGPoint buttonPosition = [afsender convertPoint: CGPointZero toView: self.tableView]; NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: buttonPosition]; hvis (indexPath! = nul) { ... indexpath.section er din sektion, index path.row er din række. } Der er også tredje mulighed. i cellforRowAtIndexpath tildel din knap en titel - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath [btn setTitle: <# Your Row #> forState: UIControlStateDisabled]; [btn setTag <#Din sektion #>]; så ved modtagelse i din knapmetode kan du have både sektion (tag) og række (titel for deaktiveret tilstand). - (ugyldigt) checkBoxClicked: (id) afsender {[knap titelForState: UIControlStateDisabled]; // din række button.tag // din sektion} | Prøv dette! Hver sektion kender du muligvis antallet af sektioner til højre, og tilføj derefter antallet af individuelle rækker. [[fieldTitlesList objectAtIndex: indexPath.section - 1] count] + indexPath.row Hvor fieldTitlesList er matrixen for dine sektioner. | Jeg tilføjede følgende kode, der løste mit problem NSInteger rowNumber = 0; til (NSInteger i = 0; i